//! \file CParameter.h
//! \brief TODO: Document
//!
//! TODO: document
// -----------------------------------------------------------------------------
//! This program is free software; you can redistribute it and/or
//! modify it under the terms of the GNU General Public License
//! as published by the Free Software Foundation; either version 2
//! of the License, or (at your option) any later version.
//!
//! This program is distributed in the hope that it will be useful,
//! but WITHOUT ANY WARRANTY; without even the implied warranty of
//! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//! GNU General Public License for more details.
//!
//! You should have received a copy of the GNU General Public License
//! along with this program; if not, write to the Free Software Foundation,
//! Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// -----------------------------------------------------------------------------

// Project Includes
#include "System.h"
#include "CKey.h"

// Standard Includes
#include <string>
#include <vector>

#ifndef dCKEY_VALUE_H_
  #define dCKEY_VALUE_H_

  namespace code_sheriff
  {

    //! \class CParameter CParameter.h "CParameter.h"
    //! \brief TODO: document
    //!
    //! TODO: document
    class CParameter
    {

      //========================================================================
      public:
      //========================================================================

        //! \brief Class constructor.
        //!
        //! This is the class constructor.  The constructor instantiates an
        //! object instance of the class and initializes the instance for use.
        //!
        //! \b Example: \code
        //! CParameter* pParameter = new CParameter();
        //! \endcode
        CParameter();

        //! \brief Class destructor.
        //!
        //! This is the class destructor.  The destructor destroys an object
        //! instance of the class and deallocates any memory that was used.
        //!
        //! \b Example: \code
        //! CParameter* pParameter = new CParameter();
        //! delete pParameter;
        //! \endcode
        virtual ~CParameter();

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [in] Key
        //!   TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        void setKey(TKEY Key);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [in] Value
        //!   TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        void setValue(std::string Value);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [in] Value
        //!   TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        void appendValue(std::string Value);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        TKEY getKey(void);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \param [out] Value
        //!   TODO: document
        //! \param [in] Index
        //!   TODO: document
        //!
        //! \retval Error
        //!   Error code indicating the result of the requested operation.
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        TERROR getValue(std::string& Value, int Index = 0);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        void clear(void);

        //! \brief TODO: document
        //!
        //! TODO: document
        //!
        //! \b Example: \code
        //! TODO: document
        //! \endcode
        void print(void);

      //========================================================================
      private:
      //========================================================================

        //! \brief TODO: document
        //!
        //! TODO: document
        TKEY m_Key;

        //! \brief TODO: document
        //!
        //! TODO: document
        std::vector<std::string> m_Values;
    };

  } // namespace code_sheriff

#endif // dCKEY_VALUE_H_

